package com.mudu.search.enums;

/**
 * @author lzqing
 * 0 请求成功
 * 99999 未知失败
 * 1开头为对通用错误信息
 * 2开头为输入输出参数错误
 * 3开头为业务调用错误
 * 4开头为数据库数据业务错误
 * 5开头为缓存调用错误
 * @description 基础返回码
 * @className BaseCodeEnum
 */
public enum ResultEnum implements BaseCodeEnum {
    /**
     * 返回码
     */
    // 应用模块公共
    SUCCESS(0, "操作成功"),
    ERROR(1, "操作失败"),
    NO_HANDLER_FOUND_ERROR(404, "未知的访问资源"),

    // * 1开头为对通用错误信息
    FAIL(10000, "通用错误信息"),
    SIGN_FAIL(10001, "签名错误"),
    TIME_FAIL(10002, "时间戳超时错误"),
    TOKEN_INVALID(10003, "认证信息(Token)非法"),
    AUTH_FAIL(10004, "权限不足"),
    NO_AUTH_FAIL(10005, "认证信息(Token)为空"),
    NO_AUTH_EXPIRED(10006, "认证信息(Token)过期已失效"),
    USER_PASSWORD_WRONG(10007, "用户名或密码错误"),
    TOKEN_INEFFECTIVE(10008, "Token无效"),

    // * 2开头为输入输出参数错误
    PARAM_ERROR(20000, "参数错误"),
    PARAM_VALID_ERROR(20001, "参数校验错误"),
    PARAM_EMPTY_ERROR(20002, "参数为空"),
    PARAM_PATTERN_ERROR(20003, "参数格式不对"),
    PARAM_PACK_ERROR(20004, "包装响应结果出错"),
    PARAM_INPUT_ERROR(20005, "输入参数异常"),

    // * 3开头为业务调用错误
    REQUEST_URL_ERROR(30000, "请求路径错误"),
    FILE_IO_EXCEPTION(30001, "文件或文件夹读取失败了"),
    ROOT_PATH_BLANK_ERROR(30002, "根路径为空"),
    ROOT_PATH_NOT_EXIST_ERROR(30003, "路径不存在"),
    FILE_RENAME_FAIL(30004, "重命名失败"),
    FILE_UPLOAD_FAIL(30005, "文件或文件夹上传失败"),
    FILE_MOVE_FAIL(30006, "移动文件或文件夹失败"),
    PROJECT_ID_NULL(30007, "项目id不能为空"),

    SHELL_SESSION_FAIL(30008, "连接算法服务器异常"),
    USER_NAME_ALREADY_EXIST(30009, "该用户名已存在"),
    LOG_FILE_NOT_EXIST(30010, "日志文件不存在"),
    TRAIN_POOL_SIZE_EXCEED_MAX(30011, "添加的训练数不能超过最大值"),
    MARK_INFO_FILE_NOT_EXIST(30012, "暂无标注信息"),

    // * 4开头为数据库数据业务错误
    DATA_INSERT_ERROR(40001, "数据库保存记录出错"),
    DATA_UPDATE_ERROR(40002, "数据库更新记录出错"),
    DATA_DELETE_ERROR(40003, "数据库删除记录出错"),
    HALT_TRAIN_ERROR(40004, "执行停止训练出错了"),
    REDO_TRAIN_ERROR(40005, "执行再次训练出错了"),

    // * 5开头为缓存调用错误


    FAILED(99999, "系统繁忙，请稍后再试.");
    /**
     * 错误码
     */
    private Integer code;
    /**
     * 错误信息
     */
    private String message;

    ResultEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return message;
    }
}